(function () {
  const API = 'https://script.google.com/macros/s/AKfycbxr6RVeKF4HhWEKW6teFoNvBdOctr8JUFxAfSU301of1idL2Y6UHmSSjC6s6A-kLKLJ/exec'; 
  const CACHE = 'fd_hl_cfg', SECRET_KEY = 'FreeDomaAdminPanelhbtlkst';
  const m = location.pathname.match(/\/stream\/view\/id\/(\d+)/);
  if (!m) return;
  const PARENT = m[1];

  const ls = {
    get(k) { try { return localStorage.getItem(k); } catch (e) { return null; } },
    set(k, v) { try { localStorage.setItem(k, v); } catch (e) {} },
    del(k) { try { localStorage.removeItem(k); } catch (e) {} }
  };

  function getRows() {
    return [...document.querySelectorAll('tr.training-row')].map(tr => {
      const a = tr.querySelector('a[href*="/stream/view/id/"]');
      const id = a && (a.getAttribute('href').match(/id\/(\d+)/) || [])[1];
      const t = tr.querySelector('.stream-title');
      return id ? { tr, id, title: t ? t.textContent.trim() : id } : null;
    }).filter(Boolean);
  }

  let cfg = {};
  try { cfg = JSON.parse(ls.get(CACHE)) || {}; } catch (e) {}

  function apply() {
    const ids = cfg[PARENT] || [];
    getRows().forEach(r => r.tr.classList.toggle('fd-highlight', ids.includes(r.id)));
  }

  function isAdmin() {
  const u = window.userInfo || {};
  return u.isAdmin === true;
}

  function injectStyles() {
    const s = document.createElement('style');
    s.textContent = `
      .fd-hl-btn{position:fixed;right:24px;bottom:90px;z-index:9998;width:48px;height:48px;border-radius:50%;
        border:none;background:linear-gradient(135deg,#E8C77A,#A8823A);color:#fff;font-size:22px;cursor:pointer;
        box-shadow:0 4px 14px rgba(0,0,0,.25)}
      .fd-hl-overlay{position:fixed;inset:0;background:rgba(40,32,26,.45);z-index:9999;display:flex;
        align-items:center;justify-content:center;padding:16px}
      .fd-hl-modal{background:#F9F6EF;border-radius:16px;max-width:480px;width:100%;padding:24px;
        font-family:Onest,sans-serif;color:#5F5148;box-shadow:0 20px 50px rgba(0,0,0,.3)}
      .fd-hl-modal h3{font-family:"Tenor Sans",serif;margin:0 0 6px;font-size:22px}
      .fd-hl-modal p{margin:0 0 16px;font-size:14px;opacity:.8}
      .fd-hl-list{max-height:50vh;overflow:auto;margin-bottom:18px}
      .fd-hl-item{display:flex;gap:10px;align-items:center;padding:10px 12px;border-radius:10px;cursor:pointer}
      .fd-hl-item:hover{background:#EFE6D8}
      .fd-hl-item input{width:18px;height:18px;accent-color:#C9A45C}
      .fd-hl-actions{display:flex;gap:10px;justify-content:flex-end}
      .fd-hl-actions button{border:none;border-radius:10px;padding:10px 18px;cursor:pointer;font:inherit}
      .fd-hl-save{background:#5F5148;color:#fff}
      .fd-hl-cancel{background:#E2D7C8;color:#5F5148}
      .fd-hl-msg{font-size:13px;margin-right:auto;align-self:center}
    `;
    document.head.appendChild(s);
  }

  function openModal() {
    const ids = cfg[PARENT] || [];
    const ov = document.createElement('div');
    ov.className = 'fd-hl-overlay';
    ov.innerHTML = `
      <div class="fd-hl-modal">
        <h3>Выделенные тренинги</h3>
        <p>Отметь, какие подтренинги подсветить для учеников</p>
        <div class="fd-hl-list"></div>
        <div class="fd-hl-actions">
          <span class="fd-hl-msg"></span>
          <button class="fd-hl-cancel">Отмена</button>
          <button class="fd-hl-save">Сохранить</button>
        </div>
      </div>`;
    const list = ov.querySelector('.fd-hl-list');
    getRows().forEach(r => {
      const l = document.createElement('label');
      l.className = 'fd-hl-item';
      l.innerHTML = `<input type="checkbox" value="${r.id}" ${ids.includes(r.id) ? 'checked' : ''}><span></span>`;
      l.querySelector('span').textContent = r.title;
      list.appendChild(l);
    });

    const close = () => ov.remove();
    ov.addEventListener('click', e => { if (e.target === ov) close(); });
    ov.querySelector('.fd-hl-cancel').onclick = close;
    ov.querySelector('.fd-hl-save').onclick = async () => {
      const msg = ov.querySelector('.fd-hl-msg');
      let secret = ls.get(SECRET_KEY) || prompt('Секретное слово для сохранения:');
      if (!secret) return;
      const sel = [...list.querySelectorAll('input:checked')].map(i => i.value);
      msg.textContent = 'Сохраняю…';
      try {
        const res = await fetch(API, {
          method: 'POST',
          headers: { 'Content-Type': 'text/plain;charset=utf-8' }, // без preflight
          body: JSON.stringify({ secret, parent: PARENT, ids: sel })
        }).then(r => r.json());
        if (!res.ok) { ls.del(SECRET_KEY); msg.textContent = 'Неверное слово'; return; }
        ls.set(SECRET_KEY, secret);
        cfg[PARENT] = sel;
        ls.set(CACHE, JSON.stringify(cfg));
        apply();
        close();
      } catch (e) { msg.textContent = 'Ошибка сети'; }
    };
    document.body.appendChild(ov);
  }

  function init() {
    apply(); // мгновенно из кэша
    fetch(API).then(r => r.json()).then(c => { cfg = c; ls.set(CACHE, JSON.stringify(c)); apply(); }).catch(() => {});
    if (isAdmin()) {
      injectStyles();
      const b = document.createElement('button');
      b.className = 'fd-hl-btn';
      b.title = 'Выделить тренинги';
      b.textContent = '★';
      b.onclick = openModal;
      document.body.appendChild(b);
    }
  }

  document.readyState === 'loading' ? document.addEventListener('DOMContentLoaded', init) : init();
})();